package edu.szcu.vitaguard.dao;

import edu.szcu.vitaguard.entity.Patient;
import org.apache.ibatis.annotations.*;

import java.util.List;

/**
 * 患者DAO接口
 */
@Mapper
public interface PatientDao {

    /**
     * 插入患者
     * @param patient 患者对象
     * @return 影响的行数
     */
    @Insert("INSERT INTO patient(patient_name, gender, birth, phone, id_card, create_time, update_time) " +
            "VALUES(#{patientName}, #{gender}, #{birth}, #{phone}, #{idCard}, #{createTime}, #{updateTime})")
    @Options(useGeneratedKeys = true, keyProperty = "patientId")
    int insert(Patient patient);

    /**
     * 根据ID查询患者
     * @param patientId 患者ID
     * @return 患者对象
     */
    @Select("SELECT * FROM patient WHERE patient_id = #{patientId}")
    Patient selectById(Integer patientId);

    /**
     * 查询所有患者
     * @return 患者列表
     */
    @Select("SELECT * FROM patient")
    List<Patient> selectAll();

    /**
     * 根据身份证号查询患者
     * @param idCard 身份证号
     * @return 患者对象
     */
    @Select("SELECT * FROM patient WHERE id_card = #{idCard}")
    Patient selectByIdCard(String idCard);

    /**
     * 根据姓名和电话查询患者
     * @param patientName 患者姓名
     * @param phone 电话
     * @return 患者列表
     */
    @Select("SELECT * FROM patient WHERE patient_name = #{patientName} AND phone = #{phone}")
    List<Patient> selectByNameAndPhone(@Param("patientName") String patientName, @Param("phone") String phone);

    /**
     * 更新患者
     * @param patient 患者对象
     * @return 影响的行数
     */
    @Update("UPDATE patient SET patient_name = #{patientName}, gender = #{gender}, birth = #{birth}, " +
            "phone = #{phone}, id_card = #{idCard}, update_time = #{updateTime} " +
            "WHERE patient_id = #{patientId}")
    int update(Patient patient);

    /**
     * 删除患者
     * @param patientId 患者ID
     * @return 影响的行数
     */
    @Delete("DELETE FROM patient WHERE patient_id = #{patientId}")
    int deleteById(Integer patientId);
}
